//
//  GDMNewFeatureController.swift
//  SinaWeibo
//
//  Created by mac on 15/11/29.
//  Copyright © 2015年 mac. All rights reserved.
//

import UIKit

import SnapKit

private let reuseIdentifier = "Cell"

private let maxCellItem = 4

class GDMNewFeatureController: UICollectionViewController {

    
//    初始化方法,初始化collectionView上的所有的内容都是在这个里面设置的
    init(){
        
//        使用collectionView的时候不许要给他一个自动布局
        let layout = UICollectionViewFlowLayout()
        
        layout.itemSize = UIScreen.mainScreen().bounds.size
        
//        设置滚动的方向
        layout.scrollDirection = .Horizontal
        
//        设置每一个的间距是0
        layout.minimumInteritemSpacing = 0
        
        layout.minimumLineSpacing = 0
        
        super.init(collectionViewLayout: layout)
        
//        设置分页滚动，这个属性是scrollView的属性，所以设置的时候要在初始化后面
        collectionView?.pagingEnabled = true
        
//        去掉弹簧的功能
        collectionView?.bounces = false
        
//        去掉下面的滚动条
        collectionView?.showsHorizontalScrollIndicator = false
        
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        
        
        self.collectionView!.registerClass(NewFeatureCell.self, forCellWithReuseIdentifier: reuseIdentifier)

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
       
        return maxCellItem
    }

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! NewFeatureCell
    
      cell.index = indexPath.item
//        cell.backgroundColor = (indexPath.item % 2 == 0 ? UIColor.orangeColor() : UIColor.redColor())
        
    
        return cell
    }

    // MARK: UICollectionViewDelegate
//   cell滚到最后一页的时候会调用这个方法
    override func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
        
//       首先拿到这个cell
        let cell = collectionView.visibleCells().last as! NewFeatureCell
        
//        在这个cell是最后一页的时候让按钮不再隐藏，开始一个动画效果
//        拿到这个cell的索引
        let index = collectionView.indexPathForCell(cell)
        
        let indexItem = index?.item ?? 0
        
        if indexItem == maxCellItem - 1 {
            
//            开启一个动画，并且让按钮显示，拿到按钮的时候也是在自定义的cell里面才可以拿到的
            cell.starAnimation()
        }
        
    }

    
    
}

//自定义cell
class NewFeatureCell:UICollectionViewCell{
    
//    在自定义的cell里面添加一个图片，在添加一个按钮
//    MARK: 懒加载控件
    private lazy var iconImage : UIImageView = UIImageView(image: UIImage(named: "new_feature_1"))
    
//    加载一个按钮，在使用swift的时候定义一个方法的时候，要是给定的参数设置一个默认的值的时候，在使用的时候可以不用传递参数
    private lazy var startBtn : UIButton = UIButton(title: "开始体验", backName: "new_feature_finish_button", color: UIColor.darkGrayColor())
//    /(title: , imageName: , color: )

// MARK:   添加按钮个那个icon图片
//    设置自动布局
    override init(frame: CGRect) {
        
        super.init(frame: frame)

        addSubviews()
        
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
//    添加子控件
    private func addSubviews(){
        
//        添加子控件
        contentView.addSubview(iconImage)
        contentView.addSubview(startBtn)
        
//        设置这两个控件的自动布局，设置约束布局
        iconImage.snp_makeConstraints { (make) -> Void in
//            使用的make局势代表的是控件的本身
            make.edges.equalTo(contentView.snp_edges)
            
        }
        
        startBtn.snp_makeConstraints { (make) -> Void in
            
            make.centerX.equalTo(contentView.snp_centerX)
            
            make.bottom.equalTo(contentView.snp_bottom).offset(-180)
            
        }
        
    }
    
//    每一个item上的图片
    var index : Int = 0 {
        
        didSet{
            
//            加载图片
            iconImage.image = UIImage(named: "new_feature_\(index + 1)")
//            设置按钮的隐藏
            startBtn.hidden = true
            
        }
    }
    
//    MARK ：开启动画，并显示按钮
    private func starAnimation(){
        
//        按钮开始显示
        startBtn.hidden = false
        
//        设置按钮的初始的形变
        startBtn.transform = CGAffineTransformMakeScale(0, 0)
        
        /**
        iOS 7.0 推出的动画效果   弹簧系数 * 10  ~= 加速度
        - parameter duartion                持续时间
        - parameter delay:                  延迟时间,出现控件
        - parameter usingSpringWithDamping: 弹簧效果 0.1 ~ 1之间  越小越弹
        - parameter initialSpringVelocity:  加速度
        - parameter options:                动画可选项
        - parameter animations:             完成动画闭包
        - parameter completion:             动画结束后的闭包
        */
        
//        通过一个动画的形式让按钮显示出来
        UIView.animateWithDuration(1.0, delay: 0.1, usingSpringWithDamping: 0.9, initialSpringVelocity: 9, options: [], animations: { () -> Void in
            
//            回归动画的原始的位置，不写这一句动画就不会出来
            self.startBtn.transform = CGAffineTransformIdentity
            
            }) { (_) -> Void in
                print("OK")
                
//                添加按钮的点击事件
                self.startBtn.addTarget(self, action: "startBtnClick", forControlEvents: .TouchUpInside)
        }
        
    }
    
//    MARK 按钮的点击事件,要是不加这个@objc点击按钮的时候这个程序就会崩溃的
   @objc private func startBtnClick(){
        
        print("\(__FUNCTION__)")

//    点击按钮的时候让跳转控制器，可以让UIAppDeleagte去监听通知，因为别的控制器在登录的时候也是需要同一样的步骤，所以他们一个最大的老大去做这件事
//    后面object的意思是谁发送的通知，如果这个后面跟着一个发送者，就是这个通知的时候不能进行多对一的发送，并且发送通知的时候都是同步的，经过自己测试过，因为要是异步的，要是有的线程堵塞了，有可能这个线程就收不到通知，或收到的晚，有可能就会对用户的体验造成影响，因此在发送通知的时候就是使用的是同步发送的
    NSNotificationCenter.defaultCenter().postNotificationName(WBSwitchRootVCNotification , object: nil)
   
    }
}
